﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;

namespace Min.ExtendKit.Common.Core.Win32.API;


/// <summary>
/// 提供对 CPU API 的托管声明。
/// </summary>
internal class CpuAPI
{

    /// <summary>
    /// 调用本地 64 位 DLL 获取 CPU 信息（CPUID 指令数据）。
    /// </summary>
    /// <param name="buffer">
    /// 用于接收 CPU 信息的字节数组，长度应足够存放返回的数据。
    /// 调用前请确保数组已正确初始化。
    /// </param>
    /// <remarks>
    /// - 该方法通过 P/Invoke 调用外部 DLL `cpuid_x64.dll`，使用 StdCall 调用约定。
    /// - 返回的 CPU 信息通常包含处理器特征、型号、家族、缓存信息等。
    /// - 仅适用于 64 位系统环境。
    /// </remarks>
    [DllImport("cpuid_x64.dll", CallingConvention = CallingConvention.StdCall)]
    internal static extern void CpuId64(byte[] buffer);

    /// <summary>
    /// 调用 Windows API 获取系统固件表（SMBIOS 等）。
    /// </summary>
    /// <param name="FirmwareTableProviderSignature">提供程序签名（例：'RSMB'）。</param>
    /// <param name="FirmwareTableID">表 ID，0 表示全部。</param>
    /// <param name="pFirmwareTableBuffer">数据缓冲区。</param>
    /// <param name="BufferSize">缓冲区大小。</param>
    /// <returns>返回实际写入/需要的缓冲区大小。</returns>
    [DllImport("kernel32.dll", SetLastError = true)]
    internal static extern uint GetSystemFirmwareTable(uint FirmwareTableProviderSignature, uint FirmwareTableID, IntPtr pFirmwareTableBuffer, uint BufferSize);
}
